/*	
 *  Copyright (c) 2009-@year@. The GUITAR group at the University of Maryland. Names of owners of this group may
 *  be obtained by sending an e-mail to atif@cs.umd.edu
 * 
 *  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
 *  documentation files (the "Software"), to deal in the Software without restriction, including without 
 *  limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 *	the Software, and to permit persons to whom the Software is furnished to do so, subject to the following 
 *	conditions:
 * 
 *	The above copyright notice and this permission notice shall be included in all copies or substantial 
 *	portions of the Software.
 *
 *	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 
 *	LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO 
 *	EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
 *	IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR 
 *	THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
 */
package edu.umd.cs.imut.executor.criteria;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import edu.umd.cs.imut.model.IComponent;

/**
 * 
 * Looking for the component based on a certain value
 * 
 * @author <a href="mailto:baonn@cs.umd.edu"> Bao N. Nguyen </a>
 * 
 */
public class NameValueCriteria extends IIdentificationCriteria {

	String name;
	List<String> values;

	/**
	 * @param name
	 *            property name
	 * @param values
	 *            property values
	 */
	public NameValueCriteria(String name, List<String> values) {
		super();
		this.name = name;
		this.values = values;
	}

	/**
	 * @param name
	 *            property name
	 * @param values
	 *            property values
	 */
	public NameValueCriteria(String name, String value) {
		super();
		this.name = name;
		this.values = new ArrayList<String>();
		values.add(value);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * edu.umd.cs.imut.executor.criteria.ICriteria#isMatch(edu.umd.cs.imut.model
	 * .IComponent)
	 */
	@Override
	public boolean isMatched(IComponent component) {

		Set<String> propertyNames = component.getPropertyNames();
		if (propertyNames == null)
			return false;

		if (!propertyNames.contains(name))
			return false;

		List<String> componentValues = component.getValuesByName(name);

		return values.equals(componentValues);
	}

	// /*
	// * (non-Javadoc)
	// *
	// * @see
	// * edu.umd.cs.imut.executor.criteria.ICriteria#toHashCode(edu.umd.cs.imut
	// * .model.IComponent)
	// */
	// @Override
	// public int toHashCode(IComponent component) {
	// HashCodeBuilder builder = new HashCodeBuilder();
	//
	// Set<String> propertyNames = component.getPropertyNames();
	// if (propertyNames == null)
	// return builder.toHashCode();
	//
	// if (!propertyNames.contains(name))
	// return builder.toHashCode();
	//
	// List<String> componentValues = component.getValuesByName(name);
	// builder.append(name);
	// for (String value : componentValues) {
	// builder.append(value);
	// }
	//
	// return builder.toHashCode();
	// }

}
